package com.grupobbva.iici.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;

import com.grupobbva.iici.dao.ProcesoDAO;
import com.grupobbva.iici.dao.impl.ProcesoDAOImpl;
import com.grupobbva.iici.serializable.Log;
import com.grupobbva.iici.serializable.Scheduler;
import com.grupobbva.iici.service.CorporativaService;
import com.grupobbva.iici.service.impl.CorporativaServiceImpl;

public class HiloEjecucionGenerarArchivo implements Runnable {

	private static Logger log = Logger.getLogger(HiloEjecucionGenerarArchivo.class.getName());

	private Scheduler schedulerDTO;
	private String usuario;
	private boolean existe;
	private File fileSalida;

	
	private ProcesoDAO procesoDAO;
	
	
	

	public HiloEjecucionGenerarArchivo(Scheduler schedulerDTO,String usuario,boolean existe,File fileSalida) {
		this.schedulerDTO = schedulerDTO;
		this.usuario = usuario;
		this.existe=existe;
		this.fileSalida = fileSalida;
		procesoDAO=new ProcesoDAOImpl();
	}

	public void run() {
		String mensaje="Carga Finalizada correctamente.";
		String codigoEstado="T05003";//EXITO
		Integer codigoBitacora = procesoDAO.generarRegistroCargaMovimiento(schedulerDTO, usuario, existe);
		
		try {
			if(codigoBitacora!=null){
				log.info("Inicio de carga de archivo RENIEC:"+schedulerDTO.getIdScheduler());
				FileReader fr = new FileReader(fileSalida);
				BufferedReader bf = new BufferedReader(fr);
				 String linea="";
				 List<Log> lstLogReniec=new ArrayList<Log>();
				while ((linea = bf.readLine())!=null) {
				  String[] columnas=StringUtils.splitPreserveAllTokens(linea,"|");
				  if("20150316183850682735SVB".equalsIgnoreCase(columnas[1].trim())){
					  int a=1;
				  }
				  Log logReniec=new Log();
				  logReniec.setCodigoBitacora(codigoBitacora);
				  logReniec.setStr_fec_consulta(schedulerDTO.getFechaProceso());
				  logReniec.setCodigoServicio(columnas[0]);
				  logReniec.setTrazabilidad(columnas[1]);
				  logReniec.setStr_num_registro(columnas[2]);
				  logReniec.setAplicativo(columnas[3]);
				  logReniec.setHoraInicio(columnas[4]);
				  logReniec.setHoraFin(columnas[5]);
				  lstLogReniec.add(logReniec);
				}
				bf.close();
				procesoDAO.registrarLog(lstLogReniec);	
				log.info("Termino de carga de archivo RENIEC");
			}
		} catch(Exception e){
			mensaje="Archivo no continene la estructura adecuada "+e.getMessage();
			codigoEstado="T05001";
		}finally{
			procesoDAO.terminarRegistroCargaMovimiento(schedulerDTO, codigoBitacora,mensaje,codigoEstado);	
		}
	}

}
